package demo01;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: YKH
 * Date: 2022-03-29
 * Time: 19:35
 */
public class Testdemo {
    private int a = 10;
    private int b =20;
    private int c =30;
    public int add() {
        return a+b;
    }
    public static void main(String[] args) {
        //生成内部类对象 1.先生成 外部类的对象
        Testdemo test = new Testdemo();
        //2.通过外部类对象 访问内部类，生成内部类的对象
        //外部类名.内部类名 变量 = 外部类对象的引用.new Person()
        Testdemo.Person inner = test.new Person();
        //生成内部类对象后 便可访问其中的成员和方法
        System.out.println(inner.a);
        inner.study();
    }

    /**
     * 一、实例内部类
     *  1. 实例内部类中不能定义静态的成员变量和方法，如果非要定义，必须加上final 使其变成常量。
     *  2. 实例类中如何访问外部类
     */
    //实例内部类
    class Person {
        int a = 1;
        int b = 2;
        int add() {
            return a+b;
        }
        public void study() {
            System.out.println("实例内部类");
            //在变量名和方法名 不同名 的情况下，内部类可以直接访问外部类中的成员变量和方法
            System.out.println(c);    //30
            System.out.println(add());//30
            //在变量名和方法名 同名 的情况下，优先调用自身的
            System.out.println(a);    //1
            System.out.println(add());//3
            // 那如果在同名情况下要调用外部类中的方法应该怎么做？如下
            System.out.println( Testdemo.this.add());//30
            //这说明实例内部类中不仅包含了自己的this 也包含了外部类的this
        }
    }
}
